//
//  determinant.h
//  linear_algebra
//
//  Created by zhangnan on 2025/3/19.
//

#ifndef determinant_h
#define determinant_h

/*
 行列式结构体(double)
 */
typedef struct{
    // 一维数组
    double * array;
    // 行列数
    int rows;
} DETERMINANT_DOUBLE_TYPE;

// 初始化行列式(double)
DETERMINANT_DOUBLE_TYPE new_double_determinant(double * arr,int rows);

/*
 行列式结构体(int)
 */
typedef struct{
    // 一维数组
    int * array;
    // 行列数
    int rows;
} DETERMINANT_INT_TYPE;

// 初始化行列式(int)
DETERMINANT_INT_TYPE new_int_determinant(int * arr,int rows);

/*
 计算double类型 第一行第index项的 余子式
 */
void cal_lower_double_determinant(double *result,DETERMINANT_DOUBLE_TYPE param,int index);


/*
 计算int类型 第一行第index项的 余子式
 */
void cal_lower_int_determinant(int *result,DETERMINANT_INT_TYPE param,int index);


/**
 根据行列序号获取行列式中的值（double）
 */
double get_double_determinant_value(DETERMINANT_DOUBLE_TYPE param,int rowIndex,int colIndex);

/**
 根据行列序号获取行列式中的值（int）
 */
double get_int_determinant_value(DETERMINANT_INT_TYPE param,int rowIndex,int colIndex);
#endif /* determinant_h */
